// src/main/java/com/example/demo/controller/LoginController.java
package com.example.demo.controller;

import com.example.demo.entity.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@RestController // 标记为REST控制器，返回JSON数据
@CrossOrigin(origins = "http://localhost:8080") // 允许前端跨域访问（前端端口8080）
@RequestMapping("/api/user") // 基础路径，所有接口均以该路径为前缀
public class LoginController {

    // 内存Map模拟数据库（key：username，value：User对象）
    private static final Map<String, User> userDB = new HashMap<>();


    /**
     * 1. 注册用户接口
     * 请求方式：POST
     * 路径：/api/user/register
     */
    @PostMapping("/register")
    public ResponseEntity<String> register(@RequestBody User user) {
        // 校验参数：用户名和密码不能为空
        if (user.getUsername() == null || user.getUsername().trim().isEmpty()) {
            return ResponseEntity.badRequest().body("用户名不能为空");
        }
        if (user.getPassword() == null || user.getPassword().trim().isEmpty()) {
            return ResponseEntity.badRequest().body("密码不能为空");
        }

        // 校验用户名是否已存在
        if (userDB.containsKey(user.getUsername())) {
            return ResponseEntity.status(HttpStatus.CONFLICT) // 409状态码：冲突
                    .body("注册失败：用户名已存在");
        }

        // 保存用户到内存（实际开发中会存入数据库）
        userDB.put(user.getUsername(), user);
        return ResponseEntity.ok("注册成功");
    }


    /**
     * 2. 用户登录接口
     * 请求方式：POST
     * 路径：/api/user/login
     */
    @PostMapping("/login")
    public ResponseEntity<String> login(@RequestBody User user) {
        // 校验参数
        if (user.getUsername() == null || user.getPassword() == null) {
            return ResponseEntity.badRequest().body("用户名或密码不能为空");
        }

        // 查找用户
        User savedUser = userDB.get(user.getUsername());
        if (savedUser == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND) // 404状态码：未找到
                    .body("登录失败：用户不存在");
        }

        // 校验密码
        if (!Objects.equals(savedUser.getPassword(), user.getPassword())) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED) // 401状态码：未授权
                    .body("登录失败：密码错误");
        }

        // 登录成功
        return ResponseEntity.ok("登录成功，欢迎回来：" + savedUser.getNickname());
    }


    /**
     * 3. 获取用户信息接口
     * 请求方式：GET
     * 路径：/api/user/info?username=xxx
     */
    @GetMapping("/info")
    public ResponseEntity<?> getUserInfo(@RequestParam String username) {
        // 查找用户
        User user = userDB.get(username);
        if (user == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body("获取失败：用户不存在");
        }
        // 返回用户信息（自动转为JSON）
        return ResponseEntity.ok(user);
    }


    /**
     * 4. 更新用户信息接口
     * 请求方式：PUT
     * 路径：/api/user/update
     */
    @PutMapping("/update")
    public ResponseEntity<String> updateUser(@RequestBody User user) {
        // 校验用户名是否存在
        if (user.getUsername() == null || !userDB.containsKey(user.getUsername())) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body("更新失败：用户不存在");
        }

        // 获取原用户信息并更新
        User oldUser = userDB.get(user.getUsername());
        // 若传入新昵称，则更新
        if (user.getNickname() != null && !user.getNickname().trim().isEmpty()) {
            oldUser.setNickname(user.getNickname());
        }
        // 若传入新邮箱，则更新
        if (user.getEmail() != null && !user.getEmail().trim().isEmpty()) {
            oldUser.setEmail(user.getEmail());
        }
        // 若传入新密码，则更新（可选功能）
        if (user.getPassword() != null && !user.getPassword().trim().isEmpty()) {
            oldUser.setPassword(user.getPassword());
        }

        // 保存更新后的用户信息
        userDB.put(oldUser.getUsername(), oldUser);
        return ResponseEntity.ok("用户信息更新成功");
    }
}